home *** CD-ROM | disk | FTP | other *** search
/ The Original Shareware 1.1 / The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso / 6 / cmerge.zip / SIEVE.LSL < prev    next >
Text File  |  1987-06-08  |  9KB  |  249 lines

  1.  
  2.                                                             
  3. Cmerge V1.0     Mon Jun 08 14:31:24 1987                    Page     1-1
  4.  
  5.                                     .186 
  6.                                     name    sieve 
  7.  0000                           _text    segment    byte public 'code' 
  8.                                 dgroup    group    _data,_bss 
  9.                                     assume    cs:_text,ds:dgroup,ss:dgroup 
  10.  0000                           _text    ends 
  11.  0000                           _data    segment word public 'data' 
  12.  0000                           _d@    label    byte 
  13.  0000                           _data    ends 
  14.  0000                           _bss    segment word public 'bss' 
  15.  0000                           _b@    label    byte 
  16.  0000                           _bss    ends 
  17.  0000                           _data    segment word public 'data' 
  18.                                     public    _flags 
  19.  0000                           _flags    label    byte 
  20.  0000  00                           db    0 
  21.  0001  1FFE[                        db    8190 dup (?) 
  22.             ??                  
  23.                          ]      
  24.                                 
  25.  1FFF                           _data    ends 
  26.  0000                           _text    segment    byte public 'code' 
  27. ;|*** 
  28. ;|*** /*    Eratosthenes Sieve Prime Number Program in C, Byte January 1983.
  29. ;|***  *    The code has been corrected to produce primes correctly.
  30. ;|*** */
  31. ;|*** #include <stdio.h>
  32. ;|*** 
  33. ;|*** #define TRUE    1
  34. ;|*** #define FALSE    0
  35. ;|*** #define NITER    150
  36. ;|*** #define SIZE    8190
  37. ;|*** 
  38. ;|*** char flags[SIZE+1]={0};
  39. ;|*** 
  40. ;|*** 
  41. ;|*** main ()
  42. ;|***     {
  43. ; Line 16
  44.  0000                           _main    proc    near 
  45.  0000  56                           push    si 
  46.  0001  57                           push    di 
  47.  0002  C8 0004 00                   enter    4,0 
  48. ;|***     register int i,k;
  49. ; Line 17
  50. ;|***     int iter, count;
  51. ; Line 18
  52. ;|*** 
  53. ; Line 19
  54. ;|***     printf ("%d iterations: ", NITER);
  55. ; Line 20
  56.  0006  68                           db    104    ; push immediate 
  57.  0007  0096                         dw    150 
  58.  0009  B8 1FFF R                    mov    ax,offset _s@ 
  59.  000C  50                           push    ax 
  60.  000D  E8 0000 E                    call    near ptr _printf 
  61.  0010  83 C4 04                     add    sp,4 
  62. ;|*** 
  63. ; Line 21
  64. Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-2
  65. ;|***     for( iter = 1; iter <= NITER; iter++ )     /* Do sieve 150 times */
  66. ; Line 22
  67.  0013  C7 46 FC 0001                mov    word ptr [bp-4],1 
  68.  0018  EB 41                        jmp    short @5 
  69.  001A                           @4: 
  70. ;|***         {
  71. ; Line 23
  72. ;|***         count = 0;
  73. ; Line 24
  74.  001A  C7 46 FE 0000                mov    word ptr [bp-2],0 
  75. ;|***         for( i = 0; i <= SIZE; i++)      /* set all flags true */
  76. ; Line 25
  77.  001F  33 F6                        xor    si,si 
  78.  0021  EB 06                        jmp    short @9 
  79.  0023                           @8: 
  80. ;|***             flags[i] = TRUE;
  81. ; Line 26
  82.  0023  C6 84 0000 R 01              mov    byte ptr dgroup:_flags[si],1 
  83.  0028  46                           inc    si 
  84.  0029                           @9: 
  85.  0029  81 FE 1FFE                   cmp    si,8190 
  86.  
  87.                                                             
  88.  
  89.  002D  7E F4                        jle    @8 
  90. ;|*** 
  91. ; Line 27
  92. ;|***         for( i = 2; i <= SIZE; i++ )
  93. ; Line 28
  94.  002F  BE 0002                      mov    si,2 
  95.  0032  EB 1E                        jmp    short @13 
  96.  0034                           @12: 
  97. ;|***             {
  98. ; Line 29
  99. ;|***             if ( flags[i] )          /* found a prime */
  100. ; Line 30
  101.  0034  80 BC 0000 R 00              cmp    byte ptr dgroup:_flags[si],0 
  102.  0039  74 16                        je    @11 
  103. ;|***                 {
  104. ; Line 31
  105. ;|***                 for ( k = i + i; k <= SIZE; k += i )
  106. ; Line 32
  107.  003B  8B FE                        mov    di,si 
  108.  003D  03 FE                        add    di,si 
  109.  003F  EB 07                        jmp    short @18 
  110.  0041                           @17: 
  111. ;|***                     flags[k] = FALSE;    /* Cancel its multiples */
  112. ; Line 33
  113.  0041  C6 85 0000 R 00              mov    byte ptr dgroup:_flags[di],0 
  114.  0046  03 FE                        add    di,si 
  115.  0048                           @18: 
  116.  0048  81 FF 1FFE                   cmp    di,8190 
  117.  004C  7E F3                        jle    @17 
  118. ;|***                 count++;
  119. ; Line 34
  120.  004E  FF 46 FE                     inc    word ptr [bp-2] 
  121. ;|***                 }
  122. ; Line 35
  123. ;|***             }
  124. ; Line 36
  125. Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-3
  126.  0051                           @11: 
  127.  0051  46                           inc    si 
  128.  0052                           @13: 
  129.  0052  81 FE 1FFE                   cmp    si,8190 
  130.  0056  7E DC                        jle    @12 
  131. ;|***         }
  132. ; Line 37
  133.  0058  FF 46 FC                     inc    word ptr [bp-4] 
  134.  005B                           @5: 
  135.  005B  81 7E FC 0096                cmp    word ptr [bp-4],150 
  136.  0060  7E B8                        jle    @4 
  137. ;|*** 
  138. ; Line 38
  139. ;|***     printf ("%d primes\n", count);
  140. ; Line 39
  141.  0062  FF 76 FE                     push    word ptr [bp-2] 
  142.  0065  B8 200F R                    mov    ax,offset _s@+16 
  143.  0068  50                           push    ax 
  144.  0069  E8 0000 E                    call    near ptr _printf 
  145.  006C  83 C4 04                     add    sp,4 
  146. ;|*** 
  147. ; Line 40
  148. ;|***     exit(0);
  149. ; Line 41
  150.  006F  6A                           db    106    ; push immediate 
  151.  0070  00                           db    0 
  152.  0071  E8 0000 E                    call    near ptr _exit 
  153.  0074  44                           inc    sp 
  154.  0075  44                           inc    sp 
  155. ;|*** 
  156. ; Line 42
  157. ;|***     }
  158. ; Line 43
  159.  0076  C9                           leave     
  160.  0077  5F                           pop    di 
  161.  
  162.                                                             
  163.  
  164.  0078  5E                           pop    si 
  165.  0079  C3                           ret     
  166.                                 _main    endp 
  167.  007A                           _text    ends 
  168.  1FFF                           _data    segment word public 'data' 
  169.  1FFF                           _s@    label    byte 
  170.  1FFF  25                           db    37 
  171.  2000  64                           db    100 
  172.  2001  20                           db    32 
  173.  2002  69                           db    105 
  174.  2003  74                           db    116 
  175.  2004  65                           db    101 
  176.  2005  72                           db    114 
  177.  2006  61                           db    97 
  178.  2007  74                           db    116 
  179.  2008  69                           db    105 
  180.  2009  6F                           db    111 
  181.  200A  6E                           db    110 
  182.  200B  73                           db    115 
  183.  200C  3A                           db    58 
  184.  200D  20                           db    32 
  185.  200E  00                           db    0 
  186. Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-4
  187.  200F  25                           db    37 
  188.  2010  64                           db    100 
  189.  2011  20                           db    32 
  190.  2012  70                           db    112 
  191.  2013  72                           db    114 
  192.  2014  69                           db    105 
  193.  2015  6D                           db    109 
  194.  2016  65                           db    101 
  195.  2017  73                           db    115 
  196.  2018  0A                           db    10 
  197.  2019  00                           db    0 
  198.  201A                           _data    ends 
  199.  007A                           _text    segment    byte public 'code' 
  200.                                     extrn    _exit:near 
  201.                                     extrn    _printf:near 
  202.                                     public    _main 
  203.  007A                           _text    ends 
  204.                                     end 
  205.  
  206.                                                             Symbols-1
  207.                                                              
  208.  
  209. Segments and Groups:
  210.  
  211.                 N a m e             Size    Align    Combine Class
  212.  
  213. DGROUP . . . . . . . . . . . . .      GROUP
  214.   _DATA  . . . . . . . . . . . .      201A    WORD    PUBLIC    'DATA'
  215.   _BSS . . . . . . . . . . . . .      0000    WORD    PUBLIC    'BSS'
  216. _TEXT  . . . . . . . . . . . . .      007A    BYTE    PUBLIC    'CODE'
  217.  
  218. Symbols:            
  219.  
  220.                 N a m e             Type    Value    Attr         
  221.  
  222. @11  . . . . . . . . . . . . . .      L NEAR    0051    _TEXT
  223. @12  . . . . . . . . . . . . . .      L NEAR    0034    _TEXT
  224. @13  . . . . . . . . . . . . . .      L NEAR    0052    _TEXT
  225. @17  . . . . . . . . . . . . . .      L NEAR    0041    _TEXT
  226. @18  . . . . . . . . . . . . . .      L NEAR    0048    _TEXT
  227. @4 . . . . . . . . . . . . . . .      L NEAR    001A    _TEXT
  228. @5 . . . . . . . . . . . . . . .      L NEAR    005B    _TEXT
  229. @8 . . . . . . . . . . . . . . .      L NEAR    0023    _TEXT
  230. @9 . . . . . . . . . . . . . . .      L NEAR    0029    _TEXT
  231. _B@  . . . . . . . . . . . . . .      L BYTE     0000    _BSS
  232. _D@  . . . . . . . . . . . . . .      L BYTE     0000    _DATA
  233. _EXIT  . . . . . . . . . . . . .      L NEAR    0000    _TEXT    External
  234. _FLAGS . . . . . . . . . . . . .      L BYTE     0000    _DATA    Global
  235. _MAIN  . . . . . . . . . . . . .      N PROC    0000    _TEXT    Global    Length = 007A
  236. _PRINTF  . . . . . . . . . . . .      L NEAR    0000    _TEXT    External
  237. _S@  . . . . . . . . . . . . . .      L BYTE     1FFF    _DATA
  238.  
  239.  
  240.     145 Source  Lines
  241.     145 Total   Lines
  242.      44 Symbols
  243.  
  244.   49228 Bytes symbol space free
  245.  
  246.       0 Warning Errors
  247. Cmerge V1.0     Mon Jun 08 14:31:25 1987                    Page     1-5
  248.       0 Severe  Errors
  249.